Общий вид
$F(x,y,z) = 0$
Параметрические
$(t_1, t_2)$ - внутренние координаты поверхности
$x = X(t_1, t_2); y = Y(t_1, t_2); z = Z(t_1, t_2)$
Как функция двух переменных
$z = f(x,z)$
Сфера
$x^2 + y^2 + z^2 = R^2$
Параметрические
$x = R \cos t_1 \sin t_2; y = R \sin t_1 \sin t_2; z = R \cos t_2$
$0 \leq t_1 < 2\pi, 0 \leq t_2 \leq \pi$
Эллипсоид
$\frac{x^2}{p^2} + \frac{y^2}{q^2} + \frac{z^2}{r^2} = 1$
Мнимый эллипсоид
$\frac{x^2}{p^2} + \frac{y^2}{q^2} + \frac{z^2}{r^2} = -1$
Мнимый конус
$\frac{x^2}{p^2} + \frac{y^2}{q^2} + \frac{z^2}{r^2} = 0$
# sage
x,y,z,R,p,q,r,t1,t2 = var('x,y,z,R,p,q,r,t1,t2')
eq1 = x^2+y^2+z^2-R^2==0
eq2 = x==R*cos(t1)*sin(t2)
eq3 = y==R*sin(t1)*sin(t2)
eq4 = z==R*cos(t2)
eq5 = x^2/p^2+y^2/q^2+z^2/r^2==1
solve([eq1, R==4], R,z)
solve([eq2, eq3, eq4, R==3], R,x,y,z)
solve([eq5, p==1,q==2,r==3], p,q,r,z)
print(sorted(colormaps))
g = Graphics()
p1 = implicit_plot3d(lambda x,y,z: x^2+y^2+z^2-4^2, (-4,4), (-4,4), (-4,4),
opacity=0.2, color='#3636ff')
text1 = text3d('x^2+y^2+z^2=4^2', (4,4,4), color='#3636ff', fontsize=12)
p2 = parametric_plot3d((3*cos(t1)*sin(t2),3*sin(t1)*sin(t2),3*cos(t2)),
(t1,0,2*pi), (t2,0,pi), opacity=0.2, color='#ff3636')
text2 = text3d('x=3cos(t1)*sin(t2), y=3sin(t1)*sin(t2), z=3cos(t1)', (-4,-4,4),
color='#ff3636', fontsize=12)
p3 = implicit_plot3d(x^2/1^2+y^2/2^2+z^2/3^2-1, (x,-4,4), (y,-4,4), (z,-4,4),
contour=0, color=((z).function(x,y,z),colormaps.bwr_r))
text3 = text3d('x^2/1^2+y^2/2^2+z^2/3^2=1', (-4,4,4), color='#ff36ff', fontsize=12)
g = g+p1+text1+p2+text2+p3+text3
g.show()
# sympy
import sympy
sympy.init_printing(use_unicode=True)
x,y,z,R,p,q,r,t1,t2 = sympy.symbols('x,y,z,R,p,q,r,t1,t2')
eq1 = x^2+y^2+z^2-R^2
eq2 = x-R*cos(t1)*sin(t2)
eq3 = y-R*sin(t1)*sin(t2)
eq4 = z-R*cos(t2)
eq5 = x^2/p^2+y^2/q^2+z^2/r^2-1
sympy.solve([eq1, R-4], R,z)
sympy.solve([eq2, eq3, eq4, R-3], R,x,y,z)
sympy.solve([eq5, p-1,q-2,r-3], p,q,r,z)
# numpy
import numpy
angle = numpy.linspace(0, 2 * numpy.pi, 64)
T1, T2 = numpy.meshgrid(angle, angle)
X = numpy.cos(T1) * numpy.sin(T2)
Y = numpy.sin(T1) * numpy.sin(T2)
Z = numpy.cos(T2)
import pylab as plt
import matplotlib as mpl
from mpl_toolkits.mplot3d import Axes3D
fig = plt.figure(figsize=(10,10))
ax = fig.add_subplot(111, projection='3d')
ax.plot_surface(4*X,4*Y,4*Z, color='#3636ff', alpha=0.1)
ax.plot_surface(3*X,3*Y,3*Z, color='#ff3636', alpha=0.2)
ax.plot_surface(1*X,2*Y,3*Z, cmap=mpl.cm.bwr_r, linewidth=1,
antialiased=True, rstride=2, cstride=2)
fake2Dline1 = mpl.lines.Line2D([0],[0], linestyle="none", c='#3636ff', marker = 'o')
fake2Dline2 = mpl.lines.Line2D([1],[1], linestyle="none", c='#ff3636', marker = 'o')
fake2Dline3 = mpl.lines.Line2D([2],[2], linestyle="none", c='#ff36ff', marker = 'o')
ax.legend([fake2Dline1, fake2Dline2, fake2Dline3],
['$x^2+y^2+z^2=4^2$',
'$x=3cos(t1)*sin(t2), y=3sin(t1)*sin(t2), z=3cos(t1)$',
'$x^2/1^2+y^2/2^2+z^2/3^2=1$'], loc=9)
ax.set_xlim(-4,4); ax.set_ylim(-4,4); ax.set_zlim(-4,4)
plt.show()
%%r
X1 <- seq(from=-3.4, to=3.4, by=0.75)
Y1 <- X1
sphere1 <- function(R, X, Y){
func <- function(x, y) {(-x^2-y^2+R^2)^0.5}
Z <- outer(X, Y, func); Z[is.na(Z)] <- 0
list(Z, -Z)
}
Z1 <- sphere1(4, X1, Y1)
print(X1); print(Z1[1])
%%r
T1 <- seq(from=0, to=2*pi, length.out=12)
T2 <- seq(from=0, to=pi, length.out=12)
sphere2 <- function(R, t1, t2){list(R*cos(t1)*sin(t2), R*sin(t1)*sin(t2), R*cos(t2))}
sphere2(3, T1, T2)
%%r
X3 <- seq(from=-0.9, to=0.9, by=0.22)
Y3 <- 2*X3
ellipsoid1 <- function(p, q, r, X, Y) {
func <- function(x, y) {r*(-x^2/p^2-y^2/q^2+1)^0.5}
Z <- outer(X, Y, func); Z[is.na(Z)] <- 0
list(Z, -Z)
}
Z3 <- ellipsoid1(1, 2, 3, X3, Y3)
print(X3); print(Z3[1])
Двуполостный гиперболоид
$\frac{x^2}{p^2} + \frac{y^2}{q^2} - \frac{z^2}{r^2} = -1$
Однополостный гиперболоид
$\frac{x^2}{p^2} + \frac{y^2}{q^2} - \frac{z^2}{r^2} = 1$
Конус
$\frac{x^2}{p^2} + \frac{y^2}{q^2} - \frac{z^2}{r^2} = 0$
# sage
x,y,z,p,q,r = var('x,y,z,p,q,r')
eq1 = x^2/p^2+y^2/q^2-z^2/r^2==-1
eq2 = x^2/p^2+y^2/q^2-z^2/r^2==1
eq3 = x^2/p^2+y^2/q^2-z^2/r^2==0
solve([eq1, p==1,q==2,r==3], p,q,r,z)
solve([eq2, p==3,q==4,r==5], p,q,r,z)
solve([eq3, p==2,q==3,r==4], p,q,r,z)
g = Graphics()
p1 = implicit_plot3d(x^2/1^2+y^2/2^2-z^2/3^2+1, (x,-7,7), (y,-7,7), (z,-7,7),
contour=0, opacity=0.5, mesh=True, color='#ff36ff')
text1 = text3d('x^2/1^2+y^2/2^2-z^2/3^2=-1', (-7,7,7), color='#ff36ff', fontsize=12)
p2 = implicit_plot3d(x^2/3^2+y^2/4^2-z^2/5^2-1, (x,-7,7), (y,-7,7), (z,-7,7),
contour=0, opacity=0.3, mesh=True, color='#ff3636')
text2 = text3d('x^2/3^2+y^2/4^2-z^2/5^2=1', (7,7,7), color='#ff3636', fontsize=12)
p3 = implicit_plot3d(x^2/2^2+y^2/3^2-z^2/4^2, (x,-7,7), (y,-7,7), (z,-7,7),
contour=0, opacity=0.7, mesh=True, color='#3636ff')
text3 = text3d('x^2/2^2+y^2/3^2-z^2/4^2=0', (-7,-7,7), color='#3636ff', fontsize=12)
g = g+p1+text1+p2+text2+p3+text3
g.show()
x,y,z,p,q,r = sympy.symbols('x,y,z,p,q,r')
eq1 = x^2/p^2+y^2/q^2-z^2/r^2+1
eq2 = x^2/p^2+y^2/q^2-z^2/r^2-1
eq3 = x^2/p^2+y^2/q^2-z^2/r^2
sympy.solve([eq1, p-1,q-2,r-3], p,q,r,z)
sympy.solve([eq2, p-3,q-4,r-5], p,q,r,z)
sympy.solve([eq3, p-2,q-3,r-4], p,q,r,z)
import warnings
warnings.simplefilter("ignore", category=RuntimeWarning)
X = numpy.linspace(-7, 7, 128)
Y = numpy.linspace(-7, 7, 128)
X, Y = numpy.meshgrid(X, Y)
def f1(x,y): return 3/2*numpy.sqrt(4*x**2 + y**2 + 4)
def f2(x,y): return 5/12*numpy.sqrt(16*x**2 + 9*y**2 - 144)
def f3(x,y): return 2/3*numpy.sqrt(9*x**2 + 4*y**2)
Z1 = f1(X,Y); Z2 = f2(X,Y); Z3 = f3(X,Y)
Z1[Z1 < -7] = numpy.NaN; Z1[Z1 > 7] = numpy.NaN
Z2[Z2 < -7] = numpy.NaN; Z2[Z2 > 7] = numpy.NaN
Z3[Z3 < -7] = numpy.NaN; Z3[Z3 > 7] = numpy.NaN
fig = plt.figure(figsize=(10,10))
ax = fig.add_subplot(111, projection='3d')
ax.plot_wireframe(X,Y,Z1, color='#ff36ff', alpha=0.7)
ax.plot_wireframe(X,Y,-Z1, color='#ff36ff', alpha=0.7)
ax.plot_wireframe(X,Y,Z2, color='#ff3636', alpha=0.3)
ax.plot_wireframe(X,Y,-Z2, color='#ff3636', alpha=0.3)
ax.plot_wireframe(X,Y,Z3, color='#3636ff', alpha=0.5)
ax.plot_wireframe(X,Y,-Z3, color='#3636ff', alpha=0.5)
fake2Dline1 = mpl.lines.Line2D([0],[0], linestyle="none", c='#ff36ff', marker = 'o')
fake2Dline2 = mpl.lines.Line2D([1],[1], linestyle="none", c='#ff3636', marker = 'o')
fake2Dline3 = mpl.lines.Line2D([2],[2], linestyle="none", c='#3636ff', marker = 'o')
ax.legend([fake2Dline1, fake2Dline2, fake2Dline3],
['$x^2/1^2+y^2/2^2-z^2/3^2=-1$',
'$x^2/3^2+y^2/4^2-z^2/5^2=1$',
'$x^2/2^2+y^2/3^2-z^2/4^2=0$'], loc=9)
ax.set_xlim(-7,7); ax.set_ylim(-7,7); ax.set_zlim(-7,7)
plt.show()
%%r
X1 <- seq(from=-0.9, to=0.9, by=0.22)
Y1 <- 2*X1
hyperboloid1 <- function(p, q, r, X, Y) {
func <- function(x, y) {r*(x^2/p^2+y^2/q^2+1)^0.5}
Z <- outer(X, Y, func); list(Z, -Z)
}
Z1 <- hyperboloid1(1, 2, 3, X1, Y1)
print(X1); print(Z1[1])
%%r
X2 <- seq(from=-5, to=5, by=1.1)
Y2 <- 4*X2/3
hyperboloid2 <- function(p, q, r, X, Y) {
func <- function(x, y) {r*(x^2/p^2+y^2/q^2-1)^0.5}
Z <- outer(X, Y, func); Z[is.na(Z)] <- 0
list(Z, -Z)
}
Z2 <- hyperboloid2(3, 4, 5, X2, Y2)
print(X2); print(Z2[1])
%%r
X3 <- seq(from=-1.9, to=1.9, by=0.4)
Y3 <- 3*X3/2
cone1 <- function(p, q, r, X, Y) {
func <- function(x, y) {r*(x^2/p^2+y^2/q^2)^0.5}
Z <- outer(X, Y, func); list(Z, -Z)
}
Z3 <- cone1(2, 3, 4, X3, Y3)
print(X3); print(Z3[1])
Эллиптический параболоид
$\frac{x^2}{p^2} + \frac{y^2}{q^2} = 2 * z$
Гиперболический параболоид
$\frac{x^2}{p^2} - \frac{y^2}{q^2} = 2 * z$
Эллиптический цилиндр
$\frac{x^2}{p^2} + \frac{y^2}{q^2} = 1$
Мнимый эллиптический цилиндр
$\frac{x^2}{p^2} + \frac{y^2}{q^2} = -1$
Гиперболический цилиндр
$\frac{x^2}{p^2} - \frac{y^2}{q^2} = 1$
Параболический цилиндр
$y^2 = 2 * p * x$
# sage
x,y,z,p,q = var('x,y,z,p,q')
eq1 = x^2/p^2+y^2/q^2==2*z
eq2 = x^2/p^2-y^2/q^2==2*z
eq3 = x^2/p^2+y^2/q^2-1==0
eq4 = x^2/p^2-y^2/q^2-1==0
eq5 = y^2==2*p*x
solve([eq1, p==1,q==2], p,q,z)
solve([eq2, p==2,q==3], p,q,z)
solve([eq3, p==3,q==4], p,q,y,z)
solve([eq4, p==2,q==3], p,q,y,z)
solve([eq5, p==2], p,y,z)
g = Graphics()
p1 = implicit_plot3d(x^2/1^2+y^2/2^2-2*z, (x,-6,6), (y,-8,8), (z,-6,6),
contour=0, opacity=0.5, mesh=True, color='#ff3636')
text1 = text3d('x^2/1^2+y^2/2^2=2*z', (7,7,7), color='#ff3636', fontsize=12)
p2 = implicit_plot3d(x^2/2^2-y^2/3^2-2*z, (x,-6,6), (y,-8,8), (z,-6,6),
contour=0, opacity=0.5, mesh=True, color='#3636ff')
text2 = text3d('x^2/2^2-y^2/3^2=2*z', (-7,-7,7), color='#3636ff', fontsize=12)
g = g+p1+text1+p2+text2
g.show()
g = Graphics()
p3 = implicit_plot3d(x^2/3^3+y^2/4^2-1, (x,-6,6), (y,-6,6), (z,-6,6),
contour=0, opacity=0.3, mesh=True, color='#36ff36')
text3 = text3d('x^2/3^2+y^2/4^2=1', (-7,7,7), color='#36ff36', fontsize=15)
p4 = implicit_plot3d(x^2/2^3-y^2/3^2-1, (x,-6,6), (y,-6,6), (z,-6,6),
contour=0, opacity=0.5, mesh=True, color='#36ffff')
text4 = text3d('x^2/2^2-y^2/3^2=1', (-7,-7,7), color='#36ffff', fontsize=15)
p5 = implicit_plot3d(y^2-2*2*x, (x,-6,6), (y,-8,8), (z,-6,6),
contour=0, opacity=0.7, mesh=True, color='#ff36ff')
text5 = text3d('y^2=2*2*x', (7,7,7), color='#ff36ff', fontsize=15)
g = g+p3+text3+p4+text4+p5+text5
g.show()
x,y,z,p,q = sympy.symbols('x,y,z,p,q')
eq1 = x^2/p^2+y^2/q^2-2*z
eq2 = x^2/p^2-y^2/q^2-2*z
eq3 = x^2/p^2+y^2/q^2-1
eq4 = x^2/p^2-y^2/q^2-1
eq5 = y^2-2*p*x
sympy.solve([eq1, p-1,q-2], p,q,z)
sympy.solve([eq2, p-2,q-3], p,q,z)
sympy.solve([eq3, p-3,q-4], p,q,y,z)
sympy.solve([eq4, p-2,q-3], p,q,y,z)
sympy.solve([eq5, p-2], p,y,z)
X = numpy.linspace(-6, 6, 128)
Y = numpy.linspace(-7, 7, 128)
X, Y = numpy.meshgrid(X, Y)
def f1(x,y): return 1/2*x**2 + 1/8*y**2
def f2(x,y): return 1/8*x**2 - 1/18*y**2
Z1 = f1(X,Y); Z2 = f2(X,Y)
Z1[Z1 < -6] = numpy.NaN; Z1[Z1 > 6] = numpy.NaN
Z2[Z2 < -6] = numpy.NaN; Z2[Z2 > 6] = numpy.NaN
fig = plt.figure(figsize=(10,10))
ax = fig.add_subplot(111, projection='3d')
ax.plot_wireframe(X,Y,Z1, color='#ff3636', alpha=0.7)
ax.plot_wireframe(X,Y,Z2, color='#3636ff', alpha=0.5)
fake2Dline1 = mpl.lines.Line2D([0],[0], linestyle="none", c='#ff3636', marker = 'o')
fake2Dline2 = mpl.lines.Line2D([1],[1], linestyle="none", c='#3636ff', marker = 'o')
ax.legend([fake2Dline1, fake2Dline2],
['$x^2/1^2+y^2/2^2=2*z$', '$x^2/2^2-y^2/3^2=2*z$'], loc=9)
ax.set_xlim(-7,7); ax.set_ylim(-7,7); ax.set_zlim(-7,7)
plt.show()
X = numpy.linspace(-6, 6, 128)
Z = numpy.linspace(-6, 6, 128)
X, Z = numpy.meshgrid(X, Z)
def f3(x): return 4/3*(-x**2 + 9)**0.5
def f4(x): return 3/2*(x**2 - 4)**0.5
def f5(x): return -2*(x)**0.5
Y3 = f3(X); Y4 = f4(X); Y5 = f5(X)
Y3[Y3 < -6] = numpy.NaN; Y3[Y3 > 6] = numpy.NaN
Y4[Y4 < -6] = numpy.NaN; Y4[Y4 > 6] = numpy.NaN
Y5[Y5 < -6] = numpy.NaN; Y5[Y5 > 6] = numpy.NaN
fig = plt.figure(figsize=(10,10))
ax = fig.add_subplot(111, projection='3d')
ax.plot_wireframe(X,Y3,Z, color='#36ff36', alpha=0.3)
ax.plot_wireframe(X,-Y3,Z, color='#36ff36', alpha=0.3)
ax.plot_wireframe(X,Y4,Z, color='#36ffff', alpha=0.7)
ax.plot_wireframe(X,-Y4,Z, color='#36ffff', alpha=0.7)
ax.plot_wireframe(X,Y5,Z, color='#ff36ff', alpha=0.5)
ax.plot_wireframe(X,-Y5,Z, color='#ff36ff', alpha=0.5)
fake2Dline1 = mpl.lines.Line2D([0],[0], linestyle="none", c='#36ff36', marker = 'o')
fake2Dline2 = mpl.lines.Line2D([0],[0], linestyle="none", c='#36ffff', marker = 'o')
fake2Dline3 = mpl.lines.Line2D([0],[0], linestyle="none", c='#ff36ff', marker = 'o')
ax.legend([fake2Dline1, fake2Dline2, fake2Dline3],
['$x^2/3^2+y^2/4^2=1$',
'$x^2/2^2-y^2/3^2=1$',
'$y^2=2*2*x$'], loc=9)
ax.set_xlim(-7,7); ax.set_ylim(-7,7); ax.set_zlim(-7,7)
plt.show()
%%r
X1 <- seq(from=-6, to=6, by=1)
Y1 <- 2*X1
paraboloid1 <- function(p, q, X, Y) {outer(X, Y, function(x, y) {(x^2/p^2+y^2/q^2)/2})}
Z1 <- paraboloid1(1, 2, X1, Y1)
print(X1); print(Z1)
%%r
X2 <- seq(from=-6, to=6, by=1)
Y2 <- 3*X2/2
paraboloid2 <- function(p, q, X, Y) {outer(X, Y, function(x, y) {(x^2/p^2-y^2/q^2)/2})}
Z2 <- paraboloid2(2, 3, X2, Y2)
print(X2); print(Z2)
%%r
X3 <- seq(from=-5, to=5, by=0.1)
Z3 <- X3
cylinder1 <- function(p, q, X, Z) {
for (x in X) {
for (z in Z) {
y <- q*(1-x^2/p^2)^0.5
v <- c(x,y,z,x,-y,z)
if (sum(is.na(v)) == 0) {
write.table(matrix(v, nrow=2, ncol=3, byrow=T),
file ="cylinder1.csv", append = TRUE, quote = FALSE,
col.names = FALSE, row.names = FALSE)
}
}
}
}
cylinder1(3, 4, X3, Z3)
%%r
Y4 <- seq(from=-5, to=5, by=0.1)
Z4 <- X4
cylinder2 <- function(p, q, X, Z) {
for (x in X) {
for (z in Z) {
y <- q*(x^2/p^2-1)^0.5
v <- c(x,y,z,x,-y,z)
if (sum(is.na(v)) == 0) {
write.table(matrix(v, nrow=2, ncol=3, byrow=T),
file ="cylinder2.csv", append = TRUE, quote = FALSE,
col.names = FALSE, row.names = FALSE)
}
}
}
}
cylinder2(2, 3, X4, Z4)
%%r
Y5 <- seq(from=-5, to=5, by=0.1)
Z5 <- Y5
cylinder3 <- function(p, Y, Z) {
for (y in Y) {
for (z in Z) {
x <- y^2/2/p
v <- c(x,y,z)
write.table(matrix(v, nrow=1, ncol=3, byrow=T),
file ="cylinder3.csv", append = TRUE, quote = FALSE,
col.names = FALSE, row.names = FALSE)
}
}
}
cylinder3(2, Y5, Z5)
X1, Y1, Z1 = numpy.loadtxt('cylinder1.csv', delimiter=' ', unpack=True)
X2, Y2, Z2 = numpy.loadtxt('cylinder2.csv', delimiter=' ', unpack=True)
X3, Y3, Z3 = numpy.loadtxt('cylinder3.csv', delimiter=' ', unpack=True)
fig = plt.figure(figsize=(10,10))
ax = fig.add_subplot(111, projection='3d')
ax.scatter(X1, Y1, Z1, s=1, c='#36ff36', marker = '1')
ax.scatter(X2, Y2, Z2, s=30, c='#36ffff', marker = '3')
ax.scatter(X3, Y3, Z3, s=3, c='#ff36ff', marker = '1')
fake2Dline1 = mpl.lines.Line2D([0],[0], linestyle="none", c='#36ff36', marker = '1')
fake2Dline2 = mpl.lines.Line2D([0],[0], linestyle="none", c='#36ffff', marker = '3')
fake2Dline3 = mpl.lines.Line2D([0],[0], linestyle="none", c='#ff36ff', marker = '1')
ax.legend([fake2Dline1, fake2Dline2, fake2Dline3],
['$x^2/3^2+y^2/4^2=1$',
'$x^2/2^2-y^2/3^2=1$',
'$y^2=2*2*x$'], loc=9)
ax.set_xlim(-7,7); ax.set_ylim(-7,7); ax.set_zlim(-7,7)
plt.show()
Пара мнимых пересекающихся плоскостей
$\frac{x^2}{p^2} + \frac{y^2}{q^2} = 0$
Пара пересекающихся плоскостей
$\frac{x^2}{p^2} - \frac{y^2}{q^2} = 0$
Пара параллельных плоскостей
$y^2 = p^2$
Пара мнимых параллельных плоскостей
$y^2 = -p^2$
Пара совпадающих плоскостей
$y^2 = 0$
# sage
x,y,z,p,q = var('x,y,z,p,q')
eq1 = x^2/p^2-y^2/q^2==0
eq2 = y^2==p^2
eq3 = y^2==0
g = Graphics()
p1 = implicit_plot3d(x^2/1^2-y^2/2^2, (x,-3,3), (y,-3,3), (z,-3,3),
contour=0, color=(sin(x+z)*cos(y+z),colormaps.bwr_r))
text1 = text3d('x^2/1^2=y^2/2^2', (4,4,4), color='#ff3636', fontsize=12)
p2 = implicit_plot3d(y^2-1^2, (x,-3,3), (y,-3,3), (z,-3,3),
contour=0, opacity=0.7, color='#ff36ff')
text2 = text3d('y^2=1^2', (-4,-4,4), color='#ff36ff', fontsize=12)
g = g+p1+text1+p2+text2
g.show()
solve([eq1, p==1,q==2], p,q,y,z)
solve([eq2, p==1], p,y,x,z)
# sympy
x,y,z,p,q = sympy.symbols('x,y,z,p,q')
eq1 = x^2/p^2-y^2/q^2
eq2 = y^2-p^2
eq3 = y^2
sympy.solve([eq1, p-1,q-2], p,q,y,z)
sympy.solve([eq2, p-1], p,y,x,z)
X = numpy.linspace(-6, 6, 128)
Z = numpy.linspace(-6, 6, 128)
X, Z = numpy.meshgrid(X, Z)
def f1(x): return 2*x
def f2(x): return 1
Y1 = f1(X); Y2 = f2(X)
Y1[Y1 < -6] = numpy.NaN; Y1[Y1 > 6] = numpy.NaN
fig = plt.figure(figsize=(10,10))
ax = fig.add_subplot(111, projection='3d')
ax.plot_surface(X,Y1,Z, cmap=mpl.cm.bwr_r, linewidth=1,
antialiased=True, rstride=2, cstride=2)
ax.plot_surface(X,-Y1,Z, cmap=mpl.cm.bwr_r, linewidth=1,
antialiased=True, rstride=2, cstride=2)
ax.plot_wireframe(X,Y2,Z, color='#ff36ff', alpha=0.5)
ax.plot_wireframe(X,-Y2,Z, color='#ff36ff', alpha=0.5)
fake2Dline1 = mpl.lines.Line2D([0],[0], linestyle="none", c='#3636ff', marker = 'o')
fake2Dline2 = mpl.lines.Line2D([1],[1], linestyle="none", c='#ff36ff', marker = 'o')
ax.legend([fake2Dline1, fake2Dline2],
['$x^2/1^2=y^2/2^2$', '$y^2=1^2$'], loc=9)
ax.set_xlim(-7,7); ax.set_ylim(-7,7); ax.set_zlim(-7,7)
plt.show()
%%r
X <- seq(from=-6, to=6, by=0.15)
Z <- X
planes1 <- function(p, q, X, Z) {
for (x in X) {
for (z in Z) {
y <- x*q/p
if (min(X) <= y && y <= max(X)) {
v <- c(x,y,z,x,-y,z)
v <- replace(v, is.na(v), 0)
write.table(matrix(v, nrow=2, ncol=3, byrow=T),
file ="planes1.csv", append = TRUE, quote = FALSE,
col.names = FALSE, row.names = FALSE)
}
}
}
}
planes2 <- function(p, X, Z) {
for (x in X) {
for (z in Z) {
v <- c(x,p,z,x,-p,z)
write.table(matrix(v, nrow=2, ncol=3, byrow=T),
file ="planes2.csv", append = TRUE, quote = FALSE,
col.names = FALSE, row.names = FALSE)
}
}
}
planes1(1, 2, X, Z); planes2(1, X, Z)
X1, Y1, Z1 = numpy.loadtxt('planes1.csv', delimiter=' ', unpack=True)
X2, Y2, Z2 = numpy.loadtxt('planes2.csv', delimiter=' ', unpack=True)
fig = plt.figure(figsize=(10,10))
ax = fig.add_subplot(111, projection='3d')
ax.scatter(X1, Y1, Z1, s=8, c=Z1, cmap=mpl.cm.bwr_r, marker='1')
ax.scatter(X2, Y2, Z2, s=2, c='#ff36ff', marker='1')
fake2Dline1 = mpl.lines.Line2D([0],[0], linestyle="none", c='#3636ff', marker='1')
fake2Dline2 = mpl.lines.Line2D([0],[0], linestyle="none", c='#ff36ff', marker='1')
ax.legend([fake2Dline1, fake2Dline2],
['$x^2/1^2=y^2/2^2$',
'$y^2=1^2$'], loc=9)
ax.set_xlim(-7,7); ax.set_ylim(-7,7); ax.set_zlim(-7,7)
plt.show()
Инициировать три поверхности второго порядка с помощью функций и
выполнить их трехмерные изображения,
используя SageMath, Python, R.